import axios from 'axios'
import md5 from 'js-md5'
import qs from 'qs'
import instance from './axiosRequest'
import { store } from '../store'
import config from '~/config'

// 这边由于后端没有区分测试和正式，姑且都写成一个接口。
axios.defaults.baseURL = config[import.meta.env.MODE].baseUrl

// 请求头，headers 信息
// axios.defaults.headers['X-Requested-With'] = 'XMLHttpRequest'
// // 默认 post 请求，使用 application/json 形式
 axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded'
//export default axios
const randomString = a => {//32位字符串
  a = a || 32;
  const $chars ='QWERTYUIOPASDFGHJKLZXCVBNM0123456789'   // 'qwertyuiopasdfghjklzxcvbnm0123456789';
  const b = $chars.length;
  let c = '';
  for (let i = 0; i < a; i++) {
    c += $chars.charAt(Math.floor(Math.random() * b));}//Math.floor(Math.random() * b))返回0-31的整数
  return c;
}
const objKeySort = (obj) => {//排序的函数
  let newArr = Object.keys(obj).sort();//先用Object内置类的keys方法获取要排序对象的属性名，再利用Array原型上的sort方法对获取的属性名进行排序
  let newObj = {};
  for (let i = 0; i < newArr.length;i++)
  {
      newObj[newArr[i]] = obj[newArr[i]];
  }
  return newObj;
}
const getString = (a) => {//a是对象
  let b = '';
  for(let key of Object.keys(a))
  {
      b+=a[key];
  }
  return b;
}

const getToken=()=>{//获取token
   let data={grant_type: 'password',scope: 'read',username:'test',password:'test'};
   data=qs.stringify(data);
   axios.defaults.headers['Authorization'] = 'Basic ZnJvbnRfYXBwOmZyb250X2FwcA=='
   return axios.post('/oauth/token',data)
  
 }
const getData=(methods, param={})=>{//请求数据
    const keySerialNo=store.getters.keyNo; //序列号 ---处理
    const ttp = new Date().getTime();
    const sk = randomString(32);
    let objectB = {
      tms: ttp,
      nonce: sk,
      method:methods,
      req_method:'MD5'
    }
    param=Object.assign(param,{keySerialNo});
    objectB = Object.assign(objectB, param);//于将所有可枚举属性的值从一个或多个源对象复制到目标对象(对象合并)（相同属性，后面覆盖前面）
    objectB = objKeySort(objectB);//对象属性排序
    let str=md5(encodeURIComponent(getString(objectB)));
    let objectC = { 'tms': ttp, 'nonce': sk, 'sign': str,method:methods,req_method:'MD5' };
    objectC = Object.assign(objectC, param)
    let data=qs.stringify(objectC);
    instance.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded'
    return instance.post(methods,data)
}


const uploadFile=(param,method)=>{//图片上传param 是file文件格式
    const formData = new FormData()
    formData.append('image-file', param)
    formData.append('method', 'common')
    instance.defaults.headers.post['Content-Type'] = 'multipart/form-data'
    return instance.post(method,formData)
}
const uploadVideo=(param,method)=>{//图片上传param 是file文件格式
  const formData = new FormData()
  formData.append('multipartFile', param)
  instance.defaults.headers.post['Content-Type'] = 'multipart/form-data'
  return instance.post(method,formData)
}


export {randomString,getToken,getData,uploadFile,uploadVideo}
export default axios

